//package com.gccloud.design.utils;
//
//import com.gccloud.idc.common.config.HttpClientRequestFactory;
//import lombok.extern.slf4j.Slf4j;
//import org.springframework.context.annotation.Primary;
//import org.springframework.http.*;
//import org.springframework.stereotype.Component;
//import org.springframework.stereotype.Service;
//import org.springframework.util.StringUtils;
//import org.springframework.web.client.RestTemplate;
//
//import javax.annotation.Resource;
//import java.util.Map;
//
///**
// * @author wu.yumin
// * @version 1.0.0
// * @Description RestTemplateUtils 工具类
// * @date 2021/8/3 21:33
// */
//@Service("tempRestTemplateUtils")
//@Primary
//@Slf4j
//public class RestTemplateUtils {
//     @Resource
//     RestTemplate restTemplate;
//
//    /**
//     * 调用postJson请求
//     * @param url 请求地址
//     * @param json json报文
//     * @param timeOut 超时时间
//     * @param header 请求头,不需要设置请求头传null
//     * @param params 参数
//     * @return
//     */
//    public String postJson(String url, String json,Integer timeOut,Map<String,String> header,Object... params){
//        HttpHeaders headers = new HttpHeaders();
//        if (header != null){
//            headers.setAll(header);
//        }
//        headers.setContentType(MediaType.APPLICATION_JSON);
//        HttpEntity<String> httpEntity = new HttpEntity<>(json,headers);
//        try {
//            log.info("restTemplate调用POST:请求url:{},参数：{}",url,json);
//            HttpClientRequestFactory.socketTimeoutThreadLocal.set(timeOut);
//            ResponseEntity<String> resp = restTemplate.exchange(url,HttpMethod.POST, httpEntity, String.class,params);
//            log.info("接口返回："+resp.toString());
//            return resp.getBody();
//        }finally {
//            HttpClientRequestFactory.socketTimeoutThreadLocal.remove();
//        }
//
//    }
//
//    /**
//     * 调用postForm请求
//     * @param url 请求地址
//     * @param params form表单
//     * @param timeOut 超时时间
//     * @param header 请求头，不需要设置请求头传null
//     * @return
//     */
//    public String postForm(String url, Map<String,Object> params,Integer timeOut,Map<String,String> header) {
//        HttpHeaders headers = new HttpHeaders();
//        if (header != null){
//            headers.setAll(header);
//        }
//        headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
//        HttpEntity<Map<String,Object>> httpEntity = new HttpEntity<>(params, headers);
//        try {
//            log.info("restTemplate调用FORM:请求url:{},参数：{}",url,params);
//            HttpClientRequestFactory.socketTimeoutThreadLocal.set(timeOut);
//            ResponseEntity<String> resp = restTemplate.exchange(url,HttpMethod.POST, httpEntity, String.class);
//            log.info("接口返回:"+resp.toString());
//            return resp.getBody();
//        }finally {
//            HttpClientRequestFactory.socketTimeoutThreadLocal.remove();
//        }
//
//    }
//
//    /**
//     * get 请求不带参数
//     * @param url 接口地址
//     * @param timeOut 超时时间
//     * @param header 请求头，不需要设置请求头传null
//     * @return
//     */
//    public String get(String url,Integer timeOut,Map<String,String> header){
//        HttpHeaders headers = new HttpHeaders();
//        if (header != null){
//            headers.setAll(header);
//        }
//        HttpEntity<?> httpEntity = new HttpEntity<>(headers);
//        try {
//            log.info("restTemplate调用GET:请求url:{}",url);
//            HttpClientRequestFactory.socketTimeoutThreadLocal.set(timeOut);
//            ResponseEntity<String> forObject = restTemplate.exchange(url,HttpMethod.GET,httpEntity, String.class);
//            log.info("接口返回:"+forObject.toString());
//            return forObject.getBody();
//        }finally {
//            HttpClientRequestFactory.socketTimeoutThreadLocal.remove();
//        }
//
//    };
//
//    /**
//     * get请求带参数
//     * @param url 接口地址
//     * @param timeOut 超时时间
//     * @param params 请求参数，与接口地址参数顺序一致
//     * @param header 请求头，不需要设置请求头传null
//     * @return
//     */
//    public String get(String url,Integer timeOut,Map<String,String> header,Object... params){
//        HttpHeaders headers = new HttpHeaders();
//        if (header != null){
//            headers.setAll(header);
//        }
//        HttpEntity<?> httpEntity = new HttpEntity<>(headers);
//        try {
//            HttpClientRequestFactory.socketTimeoutThreadLocal.set(timeOut);
//            ResponseEntity<String> forObject = restTemplate.exchange(url,HttpMethod.GET,httpEntity, String.class,params);
//            return forObject.getBody();
//        }finally {
//            HttpClientRequestFactory.socketTimeoutThreadLocal.remove();
//        }
//
//    };
//    /**
//     *  调用get请求带参数
//     * @param url 请求地址
//     * @param params url中的变量，与map key对应
//     * @param timeOut 超时时间
//     * @param header 请求头，不需要设置请求头传null
//     * @return
//     */
//    public String get(String url,Map<String,Object> params,Integer timeOut,Map<String,String> header){
//        HttpHeaders headers = new HttpHeaders();
//        if (header != null){
//            headers.setAll(header);
//        }
//        HttpEntity<Map<String,Object>> httpEntity = new HttpEntity<>(headers);
//        try {
//            String httpUrl = constructUrl(url,params);
//            log.info("restTemplate调用GET:请求url:{},参数：{}",httpUrl,params);
//            HttpClientRequestFactory.socketTimeoutThreadLocal.set(timeOut);
//            ResponseEntity<String> resp = restTemplate.exchange(constructUrl(url,params), HttpMethod.GET, httpEntity, String.class,params);
//            log.info("接口返回:"+resp.toString());
//            return resp.getBody();
//        }finally {
//            HttpClientRequestFactory.socketTimeoutThreadLocal.remove();
//        }
//
//    }
//
//    /**
//     * 调用webservice接口
//     * @param url 接口地址（注：url不需要带?wsdl）
//     * @param xml xml报文
//     * @param timeOut 超时时间
//     * @param soapAction
//     * @param header 请求头，不需要设置请求头传null
//     * @return soap报文
//     */
//    public String invokeHttpWebService(String url,String xml,Integer timeOut,String soapAction,Map<String,String> header){
//        HttpHeaders httpHeaders = new HttpHeaders();
//        if (header != null){
//            httpHeaders.setAll(header);
//        }
//        httpHeaders.setContentType(MediaType.APPLICATION_XML);
//        httpHeaders.add("SOAPAction", StringUtils.isEmpty(soapAction) ? "" :soapAction);
//        HttpEntity<String> entity = new HttpEntity<>(xml,httpHeaders);
//        try {
//            log.info("restTemplate调用SOAP:请求url:{},参数：{}",url,xml);
//            HttpClientRequestFactory.socketTimeoutThreadLocal.set(timeOut);
//            String respXml = restTemplate.postForObject(url, entity, String.class);
//            log.info("接口返回："+ respXml);
//            return respXml;
//        }finally {
//            HttpClientRequestFactory.socketTimeoutThreadLocal.remove();
//        }
//    }
//
//    public static String constructUrl(String url,Map<String,Object> paramMap){
//        if (StringUtils.isEmpty(paramMap)){
//            return url;
//        }
//        StringBuffer sb = new StringBuffer(url).append("?");
//        for (String key:paramMap.keySet()) {
//            sb.append(key).append("=").append("{").append(key).append("}").append("&");
//        }
//        sb.replace(sb.length() - 1, sb.length(), "");
//        return sb.toString();
//    }
//}
